1. МНОГООКОННЫЕ ПРОГРАММЫ
1.1. ПОСТАНОВКА ЗАДАЧИ
Необходимо сделать программу из трех окон с переходом от одного к другому. В первом и втором окне реализовать запрос данных из списков, в третьем окне выдать выбранные пользователем значения.



1.2. ПРИНЦИП РЕАЛИЗАЦИИ
Для реализации многооконных программ имеются разные подходы. Рассмотрим наиболее простой и удобный вариант, предоставляющий системой NetBeans.
Основу программы будет составлять обычное окно JFrame. Это окно создастся при создании простейшей программы, рассмотренной ранее в теме «NetBeans. Простейшая программа». Назовем его Frame1.
В основное окно Frame1 будут помещены дополнительные два окна, тоже типа JFrame. Эти дополнительные окна Frame1 и Frame2 будут добавлены в основное окно через компонент «Фрейм» из палитры «Диалоговые окно Swing». Получится следующая структура программы:


1.3. СОЗДАНИЕ МНОГООКОННОЙ ПРОГРАММЫ
1.3.1. СОЗДАНИЕ НОВОГО ПРОЕКТА
Выбираем «Файл» - «Создать проект»

Указываем тип проекта «Java» - «Приложение Java»

Задаем имя проекту и указываем, что главный класс создавать ненужно

1.3.2. СОЗДАНИЕ ПЕРВОЙ ФОРМЫ
Добавляем в проект первую (основную) форму

Задаем форме имя класса и пакет

Настраиваем форму на свободное размещение компонент

Задаем окну наличие размера и центрирование на экране



Запрещаем главному окну изменять размеры (убираем галочку со свойства «resizable»)

Задаем окну стиль оформления «Windows»

Запускаем программу для указания ее главного класса

Закрываем запущенную программу

1.3.3. ДОБАВЛЕНИЕ В ПРОЕКТ ДВУХ ДОПОЛНИТЕЛЬНЫХ ОКОН
Добавляем на форму Form1 дополнительно два окна из палитры «Диалоговые окна Swing» - «Фрейм».
Перетаскиваем компонент «Фрейм» на главную форму – в программу добавляется второе окно.
Перетаскиваем еще один компонент «Фрейм» на главную форму – в программу добавляется третье окно.

Выбираем второе окно jFrame1 и настраиваем его для расположения по центру экрана

Для этого вписываем в указанное на рисунке место строку «jFrame1.setLocationRelativeTo(null);»

Выбираем третье окно jFrame2 и настраиваем его для расположения по центру экрана

Для этого вписываем в указанное на рисунке место строку «jFrame2.setLocationRelativeTo(null);»

Переименовываем окно jFrame2 в «jFrame3»


Переименовываем окно jFrame1 в «jFrame2»


1.3.4. НАСТРОЙКА И УСТАНОВКИ ГЛАВНОГО (ПЕРВОГО) ОКНА
Наносим и настраиваем компоненты в главном окне

Задаем название окну название «Form1» в свойстве «title»

Делаем в главном окне обработчик нажатия кнопки
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// Переход на 2 окно, кнопка «Вперед»
this.setVisible(false); // Спрятать главное окно 1
jFrame2.setVisible(true); // Показать окно 2
}
1.3.5. НАСТРОЙКА И УСТАНОВКИ ВТОРОГО ОКНА
Выбираем второе окно

Указываем второму окну свободное размещение компонент

Запрещаем второму окну изменять размеры - «resizable» и задаем нужный размер в свойстве «minimumSize». Без задания данного размера форма не будет нормально отображаться

Наносим и настраиваем компоненты во втором окне

Задаем второму окну название «Form2» в свойстве «title»

Делаем во втором окне jFrame2 процедуру на закрытие и обработчики нажатия кнопок

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// Переход на главное окно 1 из 2 окна, кнопка «Назад»
jFrame2.setVisible(false); // Спрятать окно 2
this.setVisible(true); // Показать главное окно 1
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
// Переход на 3 окно из 2 окна, кнопка «Вперед»
jFrame2.setVisible(false); // Спрятать окно 2
jFrame3.setVisible(true); // Показать окно 3
}
private void jFrame2WindowClosing(java.awt.event.WindowEvent evt) {
// Выход из программы
System.exit(0); // Выход из программы
}
1.3.6. НАСТРОЙКА И УСТАНОВКИ ТРЕТЬЕГО ОКНА
Выбираем третье окно

Указываем третьему окну свободное размещение компонент

Запрещаем третьему окну изменять размеры - «resizable» и задаем нужный размер в свойстве «minimumSize». Без задания данного размера форма не будет нормально отображаться

Наносим и настраиваем компоненты в третьем окне

Задаем третьему окну название «Form3» в свойстве «title»

Делаем в третьем окне процедуру на закрытие и открытие окна и обработчики нажатия кнопок

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
// Переход на 2 окно из 3 окна, кнопка «Назад»
jFrame3.setVisible(false); // Спрятать окно 3
jFrame2.setVisible(true); // Показать окно 2
}
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
// Кнопка выхода
System.exit(0); // Выход из программы
}
private void jFrame3WindowClosing(java.awt.event.WindowEvent evt) {
// Выход из программы
System.exit(0); // Выход из программы
}
private void jFrame3WindowActivated(java.awt.event.WindowEvent evt) {
// Выдача результатов при открытии окна 3
jTextArea1.setText(""); // Очистка компонента
jTextArea1.append("Ваш выбор:" + "\n");
jTextArea1.append("___________________" + "\n");
jTextArea1.append("Город: " + jList1.getSelectedValue().toString() + "\n");
jTextArea1.append("Транспорт: " + jComboBox1.getSelectedItem().toString() + "\n");
}
1.3.7. ЗАПУСКАЕМ ГОТОВУЮ ПРОГРАММУ
2. ВСПОМОГАТЕЛЬНЫЕ МОДАЛЬНЫЕ ОКНА JDialog
Часто в программе необходимо иметь дополнительные вспомогательные окна, которые служат для выдачи какой-либо справочной информации или для запроса ответа на вопрос, например окно «О программе» или запросы на удаление файлов.
Подобные окна, как правило, открываются в модальном режиме – т.е. поверх всех других окон, и пока данное окно не будет закрыто, вызвавшее его основное окно будет неактивным.
Окна данного типа реализуются через окна типа JDialog. Для добавления в программу окна JDialog необходимо вызвать правой кнопкой мыши контекстное меню на имени пакета, выбрать опцию «Новый» - «Форма JDialog», затем указать имя класса (окна) и пакет, к которому должно относиться окно:


2.1. Пример использования модальных окон JDialog
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
// Вызов окна «О программе»
new jDialog1(null, true).setVisible(true);
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// Закрытие окна "О программе" (в окне JDialog)
this.dispose();
}
